fn string_hash(string: *mut std::ffi::c_void) -> u32 {
    let mut result: u32 = 5381;
    let mut p = string as *mut u8;
    while unsafe { *p } != 0 {
        result = (result << 5)
            .wrapping_add(result)
            .wrapping_add(unsafe { *p } as u32);
        p = unsafe { p.add(1) };
    }
    result
}
fn string_nocase_hash(string: *const std::ffi::c_void) -> u32 {
    let mut result = 5381u32;
    let mut p = string as *const u8;
    unsafe {
        while *p != 0 {
            result = (result << 5)
                .wrapping_add(result)
                .wrapping_add((*p as char).to_lowercase().next().unwrap() as u32);
            p = p.add(1);
        }
    }
    result
}
